82. 删除排序链表中的重复元素 II

82. 删除排序链表中的重复元素 II

Similar Question

leading to the advanced question

Solution Tips

方案一: 双指针

把链表里迭代常用的变量, 看作指针

var deleteDuplicates = function (head) {
    // 这次用双指针就合适了, slow 停在不重复的最后一个数上, 用来做删除操作的连接点
    // fast 跳过重复的数
    if (head === null) return head;
    // 加一个虚拟头简化操作
    const dummyHead = new ListNode(0);
    let prev = dummyHead
    dummyHead.next = head;
    let cur = head;


    while (cur !== null && cur.next !== null) {
        if (cur.val === cur.next.val) {
            const val = cur.val;
            cur = cur.next;
            while (cur !== null && cur.val === val) {
                cur = cur.next;
            }
            prev.next = cur;
        }
        else {
            prev = cur;
            cur = cur.next;
        }
    }

    return dummyHead.next;
};